package Colonia;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import Clases.*;



public class Grafo 
{
	private Map<Vertice,List<Arista>> map;
	private Integer numVertices;
	private Integer numAristas;
	private Vertice v0;
	private Vertice vf;
		
	public Grafo()
	{
		map = new HashMap<Vertice,List<Arista>>();
		numVertices = 0;
		numAristas = 0;
	}

	public Integer getNumAristas()
	{
		return numAristas;
	}

	public Integer getNumVertices()
	{
		return numVertices;
	}
	
	public void addVertex(Vertice v)
	{
		numVertices++;
		map.put(v,new ArrayList<Arista>());
	}
	
	public void addArista(Arista a)
	{
		numAristas++;
		List<Arista> lista = map.get(a.getOrigen());
		lista.add(a);
	}
	
	public Vertice getVertice(Usuario usuario, Tarea tarea)
	{
		Vertice ret = null;
		
		for(Vertice v : map.keySet())
		{
			if(v.getUsuario() != null && v.getTarea() != null)
			{
				if(v.getUsuario().equals(usuario) && v.getTarea().equals(tarea))
				{
					ret = v;
					break;
				}
			}
		}
		
		return ret;
	}
	
	public Set<Arista> getAristas()
	{
		Set<Arista> ret = new HashSet<Arista>();
		
		for(List<Arista> lista : map.values())
		{
			ret.addAll(lista);
		}
		
		return ret;
	}

	public void setVerticeInicial(Vertice v0) 
	{
		this.v0 = v0;
	}
	
	public void setVerticeFinal(Vertice vf) 
	{
		this.vf = vf;
	}
	
	public Vertice getVerticeInicial()
	{
		return v0;
	}
	
	public Vertice getVerticeFinal()
	{
		return vf;
	}

	public List<Arista> getAristasAdyacentes(Vertice v) 
	{
		return this.map.get(v);
	}
}
